﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CompanyBussiness
{
    interface IProductManagement
    {
        List<TypeProduct> GetParentTypeProduct(int languagesID, Boolean typeProductStatus);
        List<TypeProduct> GetParentTypeProductAll(int languagesID);
        List<TypeProduct> GetChildrenTypeProductAll(int languagesID, Boolean typeProductStatus);
        List<TypeProduct> GetChildrenTypeProductByParentID(int parentTypeProductID, int languagesID, Boolean typeProductStatus, int take, int StartRow);
        List<TypeProduct> GetChildrenTypeProductByParentID(int parentTypeProductID, int languagesID, Boolean typeProductStatus);
        List<TypeProduct> GetChildrenTypeProductByParentIDAll(int parentTypeProductID, int languagesID);
        TypeProduct GetTypeProductByID(int typeProductID);
        TypeProduct GetTypeProductByNameSingle(string typeProductName);
        List<TypeProduct> GetTypeProductByName(string typeProductName, int languagesID, Boolean typeProductStatus);
        List<TypeProduct> GetTypeProductByStatus(int languagesID, Boolean typeProductStatus);
        int GetTopTypeProductID(int languagesID);

        List<Product> GetProductByTypeProduct(int typeProductID, int take, int StartRow);
        List<Product> GetProductByTypeProductIDAll(int typeProductID);
        List<Product> GetProductSearch(Product product, DateTime DateForm, DateTime DateTo, int take, int StartRow);
        int GetNumberByTypeProduct(int typeProductID);
        int GetNumberProductSearch(Product product, DateTime DateForm, DateTime DateTo);
        Product GetProductByID(int productID);
        List<Product> GetProductByName(string productName, int take, int StartRow);
        List<Product> GetProductByStatus(int languagesID, Boolean productStatus, int StartRow);

        int CreateTypeProduct(int parentTypeProductID, string typeProductName, string typeProductIntro, string typeProductDes, string typeProductImg, Boolean typeProductStatus, Boolean imagesStatus, int languagesID);
        void UpdateTypeProduct(int typeProductID, int parentTypeProductID, string typeProductName, string typeProductIntro, string typeProductDes, string typeProductImg, Boolean typeProductStatus, Boolean imagesStatus, int languagesID);
        void DeleteTypeProduct(int typeProductID);

        int CreateProduct(string productName, string productDes, string productAuthor, string productSkin, int productQuantity, float productPrice, DateTime productDateIn, string productImg, Boolean productStatus, Boolean imagesStatus, int typeProductID, string file, string features);
        void UpdateProduct(int productID, string productName, string productDes, string productAuthor, string productSkin, int productQuantity, float productPrice, DateTime productDateIn, string productImg, Boolean productStatus, Boolean imagesStatus, int typeProductID, string file, string features);
        void DeleteProduct(int productID);

        string GetNametypeByID(int id);
        string GetNameProductByID(int id);

        List<Product> GetProductSearchNotDate(Product product, int take, int StartRow);
        int GetNumberProductSearchNotDate(Product product);


        List<TypeProperty> GetListTypePropertyByProductID(int ProductID);
        TypeProperty GetTypePropertyById(int Id);

        int CreateTypeProperty(TypeProperty typeProperty);
        void UpdateTypeProperty(TypeProperty typeProperty);
        void DeleteTypeProperty(int TypePropertyID);

        Property GetPropertyByID(int PropertyID);
        List<Property> GetPropertyByTypeID(int TypePropertyID);

        int CreateProperty(Property property);
        void UpdateProperty(int id, string Name, string Des, int TypeId);
        void DeleteProperty(int PropertyID);
    }
}
